﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
using Csla.Serialization;

namespace Sireass.Bl
{
    [Serializable]
    public class InformeUpdater:CommandBase<InformeUpdater>
    {
        public static readonly PropertyInfo<InformeEdit> InformeProperty = RegisterProperty<InformeEdit>(c => c.Informe);
        public InformeEdit Informe
        {

            get { return ReadProperty(InformeProperty); }
            private set { LoadProperty(InformeProperty, value); }
        }

        public static readonly PropertyInfo<ActividadInformeEdit> ActividadInformeOrdProperty = RegisterProperty<ActividadInformeEdit>(c => c.ActividadInformeOrd);
        public ActividadInformeEdit ActividadInformeOrd
        {

            get { return ReadProperty(ActividadInformeOrdProperty); }
            private set { LoadProperty(ActividadInformeOrdProperty, value); }
        }

        public static readonly PropertyInfo<ActividadInformeEdit> ActividadInformeExtProperty = RegisterProperty<ActividadInformeEdit>(c => c.ActividadInformeExt);
        public ActividadInformeEdit ActividadInformeExt
        {

            get { return ReadProperty(ActividadInformeExtProperty); }
            private set { LoadProperty(ActividadInformeExtProperty, value); }
        }

        public static void Update(InformeEdit informe, ActividadInformeEdit actividadInformeOrd, ActividadInformeEdit actividadInformeExt, EventHandler<DataPortalResult<InformeUpdater>> callback)
        {
            var cmd = new InformeUpdater { Informe = informe, ActividadInformeOrd = actividadInformeOrd, ActividadInformeExt = actividadInformeExt };
            DataPortal.BeginExecute<InformeUpdater>(cmd, callback);
        }

        public static InformeUpdater Update(InformeEdit informe, ActividadInformeEdit actividadInformeOrd, ActividadInformeEdit actividadInformeExt)
        {
            var cmd = new InformeUpdater { Informe = informe, ActividadInformeOrd = actividadInformeOrd, ActividadInformeExt = actividadInformeExt };
            return DataPortal.Execute<InformeUpdater>(cmd);
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Execute()
        {
            using (var dalManager = Sireass.Dal.DalFactory.GetManager())
            {
                if (Informe.IsNew)
                {
                    Informe = Informe.Save();
                    ActividadInformeOrd.IdInforme = Informe.IdInforme;
                    ActividadInformeOrd = ActividadInformeOrd.Save();
                    ActividadInformeExt.IdInforme = Informe.IdInforme;
                    ActividadInformeExt = ActividadInformeExt.Save();
                 }
                else
                {
                   
                   ActividadInformeExt = ActividadInformeExt.Save();
                   ActividadInformeOrd = ActividadInformeOrd.Save();
                   Informe = Informe.Save();
                }
            }
        }
    }
}
